﻿using Sisco.AplicacionEscritorio.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Problema
{
    public partial class ModificarProblema : Form
    {
        private int idProblema;
        private AccesoDatos.PROBLEMA selectedProblema;
        private AccesoDatos.USUARIO usuarioSistema;

        public ModificarProblema()
        {
            InitializeComponent();
        }

        public ModificarProblema(int idProblema, AccesoDatos.USUARIO usuariosistema) : this()
        {
            // TODO: Complete member initialization
            this.idProblema = idProblema;
            usuarioSistema = usuariosistema;
        }

        private void ListarAsistenteReparador()
        {
            LogicaNegocio.UsuarioBLL usuarioBLL = new LogicaNegocio.UsuarioBLL();
            cmbReparador.DataSource = usuarioBLL.ListarAsistenteReparador();
            cmbReparador.ValueMember = "ID";
            cmbReparador.DisplayMember = "NOMBRECOMPLETO";
            cmbReparador.SelectedIndex = -1;
        }

        private void ModificarProblema_Load(object sender, EventArgs e)
        {
            ListarAsistenteReparador();
            
            if (idProblema > 0)
            {
                LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                selectedProblema = problemaBLL.GetProblema(idProblema);

                if (selectedProblema != null)
                {
                    LogicaNegocio.UsuarioBLL usuarioBLL = new LogicaNegocio.UsuarioBLL();

                    AccesoDatos.USUARIO reparador = selectedProblema.IDREPARADOR.HasValue ? usuarioBLL.GetUsuario(selectedProblema.IDREPARADOR.Value) : null;

                    txtFechaRegistroProblema.Text = selectedProblema.FECHAREGISTROPROBLEMA.HasValue ? selectedProblema.FECHAREGISTROPROBLEMA.Value.ToShortDateString() : string.Empty;
                    txtPrioridad.Text = selectedProblema.PRIORIDAD.HasValue ?
                                        selectedProblema.PRIORIDAD.Value.Equals(1) ? "Alta" :
                                        selectedProblema.PRIORIDAD.Value.Equals(2) ? "Media" :
                                        selectedProblema.PRIORIDAD.Value.Equals(3) ? "Baja" :
                                        string.Empty : string.Empty;
                    txtTipoProblema.Text = selectedProblema.PROBLEMA_TIPO != null ? selectedProblema.PROBLEMA_TIPO.TIPO_PROBLEMA.Trim() : string.Empty;

                    if (!string.IsNullOrEmpty(txtTipoProblema.Text))
                    {
                        switch (txtTipoProblema.Text)
                        {
                            case "hardware":
                            case "software":
                                btnBuscarUsuario.Enabled = false;
                                break;
                            case "otros":
                                btnBuscarUsuario.Enabled = true;
                                break;
                        }
                    }

                    //txtReparador.Text = reparador != null ? reparador.NOMBRECOMPLETO.Trim() : string.Empty;
                    cmbReparador.SelectedIndex = selectedProblema.IDREPARADOR != null ? cmbReparador.Items.IndexOf(cmbReparador.Items.Cast<AccesoDatos.USUARIO>().SingleOrDefault(x => x.ID.Equals(selectedProblema.IDREPARADOR))) : -1;
                    txtUsuario.Text = selectedProblema.USUARIO != null ? selectedProblema.USUARIO.NOMBRECOMPLETO != null ? selectedProblema.USUARIO.NOMBRECOMPLETO.Trim() : string.Empty : string.Empty;
                    txtUsuario.Tag = selectedProblema.USUARIO != null ? selectedProblema.USUARIO.ID : new Nullable<int>();
                    txtCaso.Text = selectedProblema.CASOS_PROBL != null ? selectedProblema.CASOS_PROBL.descripcion.Trim() : string.Empty;
                    txtEstado.Text = selectedProblema.ESTADO.Trim();
                    txtPrograma.Text = selectedProblema.PROBLEMA_DETALLE != null ? selectedProblema.PROBLEMA_DETALLE.Count > 0 ? selectedProblema.PROBLEMA_DETALLE.First().NOMBREPROGRAMA.Trim() : string.Empty : string.Empty;
                    txtDescripcion.Text = selectedProblema.DESCRIPCION != null ? selectedProblema.DESCRIPCION.Trim() : string.Empty;
                    txtObservaciones.Text = selectedProblema.DESCRIPCIONOBSERVACION != null ? selectedProblema.DESCRIPCIONOBSERVACION.Trim() : string.Empty;
                }
            }
        }

        private void btnBuscarUsuario_Click(object sender, EventArgs e)
        {
            FormularioBuscar cuadroBuscar = new FormularioBuscar("Usuario");
            cuadroBuscar.ShowDialog(this);

            AccesoDatos.USUARIO selectedUsuario = cuadroBuscar.ObjetoBuscado as AccesoDatos.USUARIO;

            if (selectedUsuario != null)
            {
                txtUsuario.Text = selectedUsuario.NOMBRECOMPLETO;
                txtUsuario.Tag = selectedUsuario.ID;
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            bool correcto = false;

            if (cmbReparador.SelectedIndex >= 0)
            {
                if (txtUsuario.Tag != null)
                {
                    if (!string.IsNullOrWhiteSpace(txtDescripcion.Text))
                    {
                        correcto = true;
                    }
                    else
                    {
                        MessageBox.Show("Ingrese la descripción del problema", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Seleccione el usuario para el problema", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Seleccione el Asistente/Reparador para el problema", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            if (correcto)
            {
                //se modifica el problema
                AccesoDatos.PROBLEMA updProblema = new AccesoDatos.PROBLEMA()
                {
                    IDREPARADOR = int.Parse(cmbReparador.SelectedValue.ToString()),
                    IDUSUARIO = int.Parse(txtUsuario.Tag.ToString()),
                    DESCRIPCION = txtDescripcion.Text,
                    DESCRIPCIONOBSERVACION = string.IsNullOrWhiteSpace(txtObservaciones.Text) ? txtObservaciones.Text.Trim() : null
                };

                LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();

                int problemaModificado = problemaBLL.Modificar(selectedProblema, updProblema, usuarioSistema);

                if (problemaModificado > 0)
                {
                    MessageBox.Show("Problema modificado", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Error al actualizar el problema", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }

                this.Close();
            }
        }

    }
}
